package app.maker.entity;

import java.io.Serializable;

import javax.persistence.*;

import java.util.List;


/**
 * The persistent class for the produit database table.
 * 
 */
@Entity
@Table(name="produit")
@NamedQueries({
	@NamedQuery(name="Produit.findAll", query="SELECT p FROM Produit p"),
	@NamedQuery(name = "Produit.findProduitByName", query = "SELECT p FROM Produit p WHERE p.nom = :param") })
public class Produit implements Serializable {
	private static final long serialVersionUID = 1L;
	private int idProduit;
	private String categorie;
	private String localisation;
	private String nom;
	private float prixGrossiste;
	private float prixUnitaire;
	private byte produitFini;
	private float quantite;
	private List<Entree> entrees;
	private List<EntrepotHasProduit> entrepotHasProduits;
	private Fournisseur fournisseur;
	private List<ProduitHasProduit> produitHasProduits1;
	private List<ProduitHasProduit> produitHasProduits2;
	private List<Sortie> sorties;

	public Produit() {
	}


	@Id
	@GeneratedValue(strategy=GenerationType.AUTO)
	@Column(unique=true, nullable=false)
	public int getIdProduit() {
		return this.idProduit;
	}

	public void setIdProduit(int idProduit) {
		this.idProduit = idProduit;
	}


	@Column(nullable=false, length=45)
	public String getCategorie() {
		return this.categorie;
	}

	public void setCategorie(String categorie) {
		this.categorie = categorie;
	}


	@Column(nullable=false, length=45)
	public String getLocalisation() {
		return this.localisation;
	}

	public void setLocalisation(String localisation) {
		this.localisation = localisation;
	}


	@Column(nullable=false, length=255, unique=true)
	public String getNom() {
		return this.nom;
	}

	public void setNom(String nom) {
		this.nom = nom;
	}


	@Column(nullable=false)
	public float getPrixGrossiste() {
		return this.prixGrossiste;
	}

	public void setPrixGrossiste(float prixGrossiste) {
		this.prixGrossiste = prixGrossiste;
	}


	@Column(nullable=false)
	public float getPrixUnitaire() {
		return this.prixUnitaire;
	}

	public void setPrixUnitaire(float prixUnitaire) {
		this.prixUnitaire = prixUnitaire;
	}


	@Column(nullable=false)
	public byte getProduitFini() {
		return this.produitFini;
	}

	public void setProduitFini(byte produitFini) {
		this.produitFini = produitFini;
	}


	@Column(nullable=false)
	public float getQuantite() {
		return this.quantite;
	}

	public void setQuantite(float quantite) {
		this.quantite = quantite;
	}


	//bi-directional many-to-one association to Entree
	@OneToMany(mappedBy="produit", cascade={CascadeType.ALL})
	public List<Entree> getEntrees() {
		return this.entrees;
	}

	public void setEntrees(List<Entree> entrees) {
		this.entrees = entrees;
	}

	public Entree addEntree(Entree entree) {
		getEntrees().add(entree);
		entree.setProduit(this);

		return entree;
	}

	public Entree removeEntree(Entree entree) {
		getEntrees().remove(entree);
		entree.setProduit(null);

		return entree;
	}


	//bi-directional many-to-one association to EntrepotHasProduit
	@OneToMany(mappedBy="produit", cascade = { CascadeType.ALL }, fetch = FetchType.EAGER)
	public List<EntrepotHasProduit> getEntrepotHasProduits() {
		return this.entrepotHasProduits;
	}

	public void setEntrepotHasProduits(List<EntrepotHasProduit> entrepotHasProduits) {
		this.entrepotHasProduits = entrepotHasProduits;
	}

	public EntrepotHasProduit addEntrepotHasProduit(EntrepotHasProduit entrepotHasProduit) {
		getEntrepotHasProduits().add(entrepotHasProduit);
		entrepotHasProduit.setProduit(this);

		return entrepotHasProduit;
	}

	public EntrepotHasProduit removeEntrepotHasProduit(EntrepotHasProduit entrepotHasProduit) {
		getEntrepotHasProduits().remove(entrepotHasProduit);
		entrepotHasProduit.setProduit(null);

		return entrepotHasProduit;
	}


	//bi-directional many-to-one association to Fournisseur
	@ManyToOne
	@JoinColumn(name="idFournisseur", nullable=false)
	public Fournisseur getFournisseur() {
		return this.fournisseur;
	}

	public void setFournisseur(Fournisseur fournisseur) {
		this.fournisseur = fournisseur;
	}


	//bi-directional many-to-one association to ProduitHasProduit
	@OneToMany(mappedBy="produit1")
	public List<ProduitHasProduit> getProduitHasProduits1() {
		return this.produitHasProduits1;
	}

	public void setProduitHasProduits1(List<ProduitHasProduit> produitHasProduits1) {
		this.produitHasProduits1 = produitHasProduits1;
	}

	public ProduitHasProduit addProduitHasProduits1(ProduitHasProduit produitHasProduits1) {
		getProduitHasProduits1().add(produitHasProduits1);
		produitHasProduits1.setProduit1(this);

		return produitHasProduits1;
	}

	public ProduitHasProduit removeProduitHasProduits1(ProduitHasProduit produitHasProduits1) {
		getProduitHasProduits1().remove(produitHasProduits1);
		produitHasProduits1.setProduit1(null);

		return produitHasProduits1;
	}


	//bi-directional many-to-one association to ProduitHasProduit
	@OneToMany(mappedBy="produit2")
	public List<ProduitHasProduit> getProduitHasProduits2() {
		return this.produitHasProduits2;
	}

	public void setProduitHasProduits2(List<ProduitHasProduit> produitHasProduits2) {
		this.produitHasProduits2 = produitHasProduits2;
	}

	public ProduitHasProduit addProduitHasProduits2(ProduitHasProduit produitHasProduits2) {
		getProduitHasProduits2().add(produitHasProduits2);
		produitHasProduits2.setProduit2(this);

		return produitHasProduits2;
	}

	public ProduitHasProduit removeProduitHasProduits2(ProduitHasProduit produitHasProduits2) {
		getProduitHasProduits2().remove(produitHasProduits2);
		produitHasProduits2.setProduit2(null);

		return produitHasProduits2;
	}


	//bi-directional many-to-one association to Sortie
	@OneToMany(mappedBy="produit")
	public List<Sortie> getSorties() {
		return this.sorties;
	}

	public void setSorties(List<Sortie> sorties) {
		this.sorties = sorties;
	}

	public Sortie addSorty(Sortie sorty) {
		getSorties().add(sorty);
		sorty.setProduit(this);

		return sorty;
	}

	public Sortie removeSorty(Sortie sorty) {
		getSorties().remove(sorty);
		sorty.setProduit(null);

		return sorty;
	}

}